Inside Macintosh: QuickTime Components
| Previous | Chapter contents | Chapter top | Section top | Next |
Listing 1 supplies a sample program that implements a movie data exchange component that imports a Scrapbook file containing QuickDraw PICT images. (For details on QuickDraw PICT images, see the chapter "Basic QuickDraw" in Inside Macintosh: Imaging .) The sample program also provides the dispatchers for the movie import component together with the required functions.
Listing 1 Implementing the required import functions
#define kMediaTimeScale 600
typedef struct {
ComponentInstance self
TimeValue frameDuration;
} ImportScrapbookGlobalsRecord, **ImportScrapbookGlobals;
/* entry point for all Component Manager requests */
pascal ComponentResult ImportScrapbookDispatcher
(ComponentParameters *params,
Handle storage)
{
OSErr err = badComponentSelector;
ComponentFunction componentProc = 0;
switch (params->what) {
case kComponentOpenSelect:
componentProc = ImportScrapbookOpen; break;
case kComponentCloseSelect:
componentProc = ImportScrapbookClose; break;
case kComponentCanDoSelect:
componentProc = ImportScrapbookCanDo; break;
case kComponentVersionSelect:
componentProc = ImportScrapbookVersion; break;
case kMovieImportFileSelect:
componentProc = ImportScrapbookFile; break;
case kMovieImportSetSampleDurationSelect:
componentProc = ImportScrapbookSetSampleDuration; break;
}
if (componentProc)
err = CallComponentFunctionWithStorage (storage, params,
componentProc);
return err;
}
pascal ComponentResult ImportScrapbookCanDo
(ImportScrapbookGlobals storage,
short ftnNumber)
{
switch (ftnNumber) {
case kComponentOpenSelect:
case kComponentCloseSelect:
case kComponentCanDoSelect:
case kComponentVersionSelect:
case kMovieImportFileSelect:
case kMovieImportSetSampleDurationSelect:
return true;
default:
return false;
}
}
pascal ComponentResult ImportScrapbookVersion
(ImportScrapbookGlobals storage)
{
return 0x00010001;
}
pascal ComponentResult ImportScrapbookOpen
(ImportScrapbookGlobals storage,
ComponentInstance self)
{
storage = (ImportScrapbookGlobals) NewHandleClear
(sizeof (ImportScrapbookGlobalsRecord));
if (!storage) return MemError();
(**storage).self = self;
SetComponentInstanceStorage (self, (Handle)storage);
return noErr;
}
pascal ComponentResult ImportScrapbookClose
(ImportScrapbookGlobals storage,
ComponentInstance self)
{
if (storage) DisposeHandle((Handle)storage);
return noErr;
}
| Previous | Chapter contents | Chapter top | Section top | Next |